#include <stdio.h>
#include <stdlib.h>


/*
 *此段代码展示全局变量的坏处
* 一个模块对i的改变会影响其他模块
*
* 分析：main() 
* 	{ 	i=0 -> 循环
* 		print_star();->循环=》i=5
*	
* 		i++ => i=6	不
* 		符合for循环要求 -> 跳出
* 
* 	}
* */
int i = 0;
void print_star(void)
{
	for (i=0;i<5;i++)
	{
		printf("*");
	}
	printf("\n");
	printf("[%s]i = %d\n",__FUNCTION__,i); //宏 所在 {} 函数名
}
int main(void)
{

	for (i = 0;i < 5; i ++)
	{
		print_star();
	}
	printf("[%s]i = %d\n",__FUNCTION__,i);	
	exit(0);
}






#if 0
/*
 * 此代码展示全局变量与局部变量
 * */

int key = 100;//全局变量 作用域：从定义完开始到下面
void func (int key)
{
	printf("key = %d\n",key);//局部变量  作用域：{ }

}

int main(void)
{
	int key = 3; //局部变量
	func(key);
	{
		int key = 5; //局部变量
		printf("key = %d\n",key);
	}
	exit(0);
}
#endif







/*
 *此代码展示auto static
 * */
#if 0
void autoFunc(void)
{
	int autokey = 0;
	autokey = autokey + 1;
	printf("%p->%d\n",&autokey,autokey);
/*使用auto的变量地址不一定相同；（地址相同： gcc的问题）
 *
 * */
}

void testFunc(void)
{
	static int statickey = 0;
	statickey = statickey + 1;
	printf("%p->%d\n",&statickey,statickey);
/*
 *使用 static 的变量地址一定相同；
 *所以key会自己加上去 
 * */


}


int main(void)
{

	auto int autokey1;
	int autokey2;
	printf("autokey1 = %d\n",autokey1);
	printf("autokey2 = %d\n",autokey2);
/*使用auto的变量不会被初始化 (此处为0是gcc的优化)
 * */

	printf("========\n");
	autoFunc();
	autoFunc();
	autoFunc();

	printf("========\n");
	testFunc();
	testFunc();
	testFunc();	


	exit(0);
}
#endif
